let user = {
	name: 'Jake',
	age: 27,
}

// 【删除属性】
delete user.age
console.log(user) // {name: 'Jake'}

// 【多词属性/计算属性】
let key = 'trueName'

let person = {
	'first-name': 'John', // 多词属性
	[key]: 'Doe', // 计算属性
}

console.log(person['first-name']) // John
console.log(person[key]) // Doe

// 【属性简写】
let myName = 'Jane'
let myAge = 30

let u2 = {
	myName, // 与 myName: myName 相同
	myAge,
	city: 'New York',
}

console.log(u2.myName) // Jane

// 【对象key是字符串类型，其他类型会被自动地转换为字符串。】
let obj = {
	0: 'a',
}

console.log(obj['0']) // a
console.log(obj[0]) // a（数字 0 被转为字符串 "0"）

// 【属性是否存在 in 操作符】
// 语法：key in object

let user2 = {
	name: 'Jake',
	age: 108,
}

console.log('name' in user2) // true
console.log('city' in user2) // false

// 【for...in 遍历对象】
// for(let prop in obj)

// 【属性顺序】
// 属性排序规则：1.整数属性会被进行排序；2.其他属性按照创建的顺序排列。

// 整数属性:指的是一个可以在不做任何更改的情况下与一个整数进行相互转换的字符串。例如：
let key1 = '49'
console.log(String(Number(key1))) // "49"（来回转换，没有任何变化）

let key2 = '+49'
console.log(String(Number(key2))) // "49"（再转回字符串时，+ 号丢失了，所以不算整数属性，在对象中不会进行排序）

// * 整数属性对象
let numObj = {
	5: 'five',
	1: 'one',
	3: 'three',
	2: 'two',
}

for (const prop in numObj) {
	console.log(prop) // 1 2 3 5
}

// * 其他属性对象
let otherObj = {
	name: 'Jake',
	age: 27,
}

otherObj.city = 'New York'

for (const prop in otherObj) {
	console.log(prop) // name age city
}
